{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# TensorFlow Regression Example"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Creating Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 1 Million Points\n",
    "x_data = np.linspace(0.0,10.0,1000000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "noise = np.random.randn(len(x_data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# y = mx + b + noise_levels\n",
    "b = 10\n",
    "\n",
    "y_true =  (2.5 * x_data ) + 15 + noise"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1106d5940>]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sample_indx = np.random.randint(len(x_data),size=(250))\n",
    "plt.plot(x_data[sample_indx],y_true[sample_indx],'*')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TensorFlow\n",
    "## Batch Size\n",
    "\n",
    "We will take the data in batches (1,000,000 points is a lot to pass in at once)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Random 10 points to grab\n",
    "batch_size = 10"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Variables**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "w_tf = tf.Variable(np.random.uniform())\n",
    "b_tf = tf.Variable(np.random.uniform(1,10))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Placeholders**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = tf.placeholder(tf.float32,shape=(batch_size))\n",
    "y_train = tf.placeholder(tf.float32,shape=(batch_size))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Graph**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_hat = w_tf * x_train + b_tf"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Loss Function**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "error = tf.reduce_sum((y_train - y_hat)**2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Optimizer**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer = tf.train.GradientDescentOptimizer(0.001)\n",
    "train = optimizer.minimize(error)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Initialize Variables**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "init = tf.global_variables_initializer()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Session"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(init)\n",
    "    batchs = 1000\n",
    "    for i in range(batchs):\n",
    "        batch_index = np.random.randint(len(x_data),size=(batch_size))\n",
    "        feed = {x_train:x_data[batch_index], y_train:y_true[batch_index]}\n",
    "        sess.run(train,feed_dict = feed)\n",
    "    final_w, final_b = sess.run([w_tf,b_tf])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0xb33a8ee10>]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x_data[sample_indx],y_true[sample_indx],'*')\n",
    "plt.plot(x_data, final_w*x_data+final_b,'r')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Train Test Split\n",
    "\n",
    "We haven't actually performed a train test split yet! So let's do that on our data now and perform a more realistic version of a Regression Task"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train, x_eval, y_train, y_eval = train_test_split(x_data,y_true,test_size=0.3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(700000,)\n",
      "(700000,)\n",
      "(300000,)\n",
      "(300000,)\n"
     ]
    }
   ],
   "source": [
    "print(x_train.shape)\n",
    "print(y_train.shape)\n",
    "\n",
    "print(x_eval.shape)\n",
    "print(y_eval.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "sample_indx = np.random.randint(len(x_eval),size=(250))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a3976c940>]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x_eval[sample_indx],y_eval[sample_indx],'*')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## tf.keras API"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.keras.models import Sequential\n",
    "from tensorflow.keras.layers import Dense\n",
    "from tensorflow.keras.optimizers import SGD"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Program Keras Model**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = Sequential()\n",
    "model.add(Dense(1,input_shape = (1,)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Setup Optimizer**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 319,
   "metadata": {},
   "outputs": [],
   "source": [
    "sgd = SGD(0.001)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Compile Model**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 320,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.compile(loss='mse', optimizer=sgd, metrics=['mse'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 321,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/1\n",
      "700000/700000 [==============================] - 27s 38us/step - loss: 3.7510 - mean_squared_error: 3.7510\n"
     ]
    }
   ],
   "source": [
    "H = model.fit(x_train, y_train, epochs = 1,batch_size = 32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 322,
   "metadata": {},
   "outputs": [],
   "source": [
    "w_final, b_final = model.get_weights()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 324,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2.5086308]\n"
     ]
    }
   ],
   "source": [
    "print(w_final[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 325,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[14.990834]\n"
     ]
    }
   ],
   "source": [
    "print(b_final)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 344,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a4709f518>]"
      ]
     },
     "execution_count": 344,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x_data[sample_indx],y_true[sample_indx],'*')\n",
    "plt.plot(x_data, w_final[0]*x_data+b_final,'r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = model.predict(x_eval)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a788a6d68>,\n",
       " <matplotlib.lines.Line2D at 0x1a788a6e80>]"
      ]
     },
     "execution_count": 255,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x_eval[sample_indx],y_eval[sample_indx],'bo',\n",
    "        x_eval[sample_indx],y_pred[sample_indx],'g+')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TF Eager mode"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set Eager API\n",
    "tf.enable_eager_execution()\n",
    "tfe = tf.contrib.eager"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "w_tf = tfe.Variable(np.random.uniform())\n",
    "b_tf = tfe.Variable(np.random.uniform(1,10))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python (spinningup)",
   "language": "python",
   "name": "spinningup"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
